package main

import (
    "fmt"
    "sync/atomic"
)

//atomic相比操作系统层面的mutex，它的原子操作由底层硬件支持，更加高效
func main() {
    var a int32
    a += 10
    atomic.AddInt32(&a, 10)
    fmt.Println(a == 20) // true

    var b uint32
    b += 20
    atomic.AddUint32(&b, ^uint32(10-1))
    // 等价于 b -= 10
    // atomic.Adduint32(&b, ^uint32(N-1))
    fmt.Println(b == 10) // true

    fmt.Println(atomic.CompareAndSwapInt32(&a, 20, 22))
    fmt.Println(a)

    var

}

// CompareAndSwapInt32即CAS算法，乐观锁的一种实现方式,是一种无锁的算法来重整数据的原子性
//参考http://wjp2013.github.io/go/go-atomic/